package com.zyzg.service;

import com.zyzg.domain.GpsData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import java.util.List;

import java.text.SimpleDateFormat;
import java.util.*;

@Service
public class GpsDataService {

    @Autowired
    private MongoTemplate mongoTemplate;

    public void saveGpsDataList(List<GpsData> gpsDataList) {
        // 调用分组方法，按 configId 和月份对数据进行分组
        Map<String, List<GpsData>> groupedData = groupDataByConfigIdAndMonth(gpsDataList);
        // 遍历分组后的数据
        for (Map.Entry<String, List<GpsData>> entry : groupedData.entrySet()) {
            // 获取集合名称
            String collectionName = entry.getKey();
            // 获取该集合对应的数据列表
            List<GpsData> dataForCollection = entry.getValue();
            // 将数据插入到对应的 MongoDB 集合中
            mongoTemplate.insert(dataForCollection, collectionName);
        }
    }

    private Map<String, List<GpsData>> groupDataByConfigIdAndMonth(List<GpsData> gpsDataList) {
        // 用于存储分组后的数据
        Map<String, List<GpsData>> groupedData = new HashMap<>();
        // 用于格式化日期，只保留年月信息
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
        // 遍历 GPS 数据列表
        for (GpsData gpsData : gpsDataList) {
            // 生成集合名称，格式为 gps_data_<configId>_<yyyyMM>
            String collectionName = "gps_data_" + gpsData.getConfigId() + "_" + sdf.format(gpsData.getGpsTime());
            // 如果该集合名称对应的列表不存在，则创建一个新的列表，并将当前数据添加到列表中
            groupedData.computeIfAbsent(collectionName, k -> new ArrayList<>()).add(gpsData);
        }
        return groupedData;
    }
}